#define _USE_MATH_DEFINES

#include <cstdio>
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <map>
#include <set>
#include <queue>
#include <cassert>
#include <stack>
#include <cstdlib>
#include <bitset>
#include <cmath>

#define forn(i,n) for (int i = 0; i < int(n); ++i)
#define pb push_back
#define all(a) a.begin(),a.end()
#define sz(a) int(a.size())
#define mp make_pair

using namespace std;

typedef long long li;
typedef long double ld;

typedef pair<int,int> pt;
#define ft first
#define sc second

const int INF = int(1e9);
const li INF64 = li(1e18);
const ld EPS = 1e-9;

//#define TASK_NAME ""

const int N = 100 * 1000 + 5;

int n;
int pw;
int vw[N], pf[N], vf[N], th[N];

bool read() {
	if (scanf("%d", &n) != 1)
		return false;
	if (n == 0)
		return false;
	scanf("%d", &pw);
	forn(i, n)
		scanf("%d %d %d %d", &vw[i], &pf[i], &vf[i], &th[i]);
	return true;
}

inline ld try_solve(ld w) {
	ld res = w * pw;
	forn(i, n) {
		ld need = th[i] - w * vw[i];
		if (need < 0)
			continue;
		res += need / vf[i] * pf[i];
	}
	return res;
}

void solve() {
	ld l = 0., r = 300.;
	forn(_, 100) {
		ld m1 = l + (r - l) / 3;
		ld m2 = r - (r - l) / 3;

		if (try_solve(m1) < try_solve(m2))
			r = m2;
		else
			l = m1;
	}

	cout << setprecision(9) << fixed << try_solve((l + r) * 0.5) << endl;
}

int main() {
#ifdef TASK_NAME
	freopen(TASK_NAME ".in", "r", stdin);
	freopen(TASK_NAME ".out", "w", stdout);
#endif

#ifdef _DEBUG
	freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
#endif

	while (read())
		solve();

	return 0;
}